package com.neo.config.quartz;

import java.io.IOException;
import java.util.Properties;

import javax.annotation.PostConstruct;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.scheduling.quartz.SchedulerFactoryBean;

@Configuration
public class SchedulerListener {
	private Logger logger = LogManager.getLogger(getClass());
	@Bean
	@PostConstruct
	public Scheduler scheduler() throws IOException, SchedulerException {
		SchedulerFactory schedulerFactory = new StdSchedulerFactory(quartzProperties());
		Scheduler scheduler = schedulerFactory.getScheduler();
		scheduler.start();
		logger.info("------------------------------------------------------------------------quartz:启动");
		return scheduler;
	}

	/**
	 * 设置quartz属性
	 * 
	 * @throws IOException
	 *             2017年4月11日下午2:20:07
	 */
	public Properties quartzProperties() throws IOException {
		Properties prop = new Properties();
		prop.put("quartz.scheduler.instanceName", "DefaultQuartzScheduler");
		prop.put("org.quartz.scheduler.instanceId", "AUTO");
		prop.put("org.quartz.scheduler.skipUpdateCheck", "true");
		prop.put("org.quartz.scheduler.instanceId", "NON_CLUSTERED");
		prop.put("org.quartz.scheduler.jobFactory.class", "org.quartz.simpl.SimpleJobFactory");
		prop.put("org.quartz.jobStore.class", "org.quartz.simpl.RAMJobStore");
		// prop.put("org.quartz.jobStore.driverDelegateClass",
		// "org.quartz.impl.jdbcjobstore.StdJDBCDelegate");
		// prop.put("org.quartz.jobStore.dataSource", "quartzDataSource");
		// prop.put("org.quartz.jobStore.tablePrefix", "QRTZ_");
		// prop.put("org.quartz.jobStore.isClustered", "true");
		// prop.put("org.quartz.threadPool.class",
		// "org.quartz.simpl.SimpleThreadPool");
		prop.put("org.quartz.threadPool.threadCount", "5");

		/*
		 * prop.put("org.quartz.dataSource.quartzDataSource.driver",
		 * "com.mysql.jdbc.Driver");
		 * prop.put("org.quartz.dataSource.quartzDataSource.URL",
		 * "jdbc:mysql://localhost:3306/demo-schema");
		 * prop.put("org.quartz.dataSource.quartzDataSource.user", "root");
		 * prop.put("org.quartz.dataSource.quartzDataSource.password",
		 * "123456");
		 * prop.put("org.quartz.dataSource.quartzDataSource.maxConnections",
		 * "10");
		 */
		return prop;
	}
}
